
#include <iostream>
#include <cassert>

using namespace std;

class B;

class A
{
  public:
    void pnt(void) const
    {
        cout << "a " << endl;
    }
    void pnt(const B &b);
    // {
    //     b.pnt();
    // }
};


class B
{
  public:
    void pnt(void) const
    {
        cout << "b " << endl;
    }
    void pnt(const A &a)
    {
        a.pnt();
    }
};

// 这个函数的实现必须在 B 完成之后才正确
void A::pnt(const B &b)
{
    b.pnt();
}


int main()
{
    A a;
    B b;
    a.pnt(b);
    b.pnt(a);
    return 0;
}